package com.wjw.java.basic.array_;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 数组的排序：
 * 1.冒泡排序,从小到大排序
 * 2.顺序查找
 */
public class ArraySort {
    public static void main(String[] args) {
        bubbleSorting();
        bubbleSorting2();
        System.out.println("------------------------------------");
        searchAsc();
    }

    /**
     * 1-1.冒泡排序思路：i和i+1进行比较
     * --------------------------------------
     * 第一轮排序：目标把最大数放在最后面
     * 第1次比较{24,69,80,57,13}
     * 第2次比较{24,69,80,57,13}
     * 第3次比较{24,69,57,80,13}
     * 第4次比较{24,69,57,13,80}
     * --------------------------------------
     * 第二轮排序：目标把最二大数放在倒数第二位置
     * 第1次比较{24,69,57,13,80}
     * 第2次比较{24,57,69,13,80}
     * 第3次比较{24,57,13,69,80}
     * --------------------------------------
     * 第三轮排序：目标把最三大数放在倒数第三位置
     * 第1次比较{24,57,13,69,80}
     * 第2次比较{24,13,57,69,80}
     * --------------------------------------
     * 第四轮排序：目标把最四大数放在倒数第四位置
     * 第1次比较{13,24,57,69,80}
     * --------------------------------------
     * 外层循环控制排序的轮次：使用变量j
     * 循环条件：
     * 内层循环控制该轮次比较的次数：使用变量i
     */
    public static void bubbleSorting(){
        int [] array = {24,69,80,57,13};
        int temp = 0;
        //第一轮排序：比较次数4
        for (int i = 0; i < array.length - 1; i++) {
            //前面的数比后面大,就交换位置
            if(array[i] > array[i+1]){
                temp = array[i];//空面的位置空出来
                array[i] = array[i+1];//后面的移到前面去
                array[i+1] = temp;//交换位置完成
            }
        }
        System.out.println(Arrays.toString(array));
        //第二轮排序：比较次数3
        for (int i = 0; i < array.length - 2; i++) {
            //前面的数比后面大,就交换位置
            if(array[i] > array[i+1]){
                temp = array[i];//空面的位置空出来
                array[i] = array[i+1];//后面的移到前面去
                array[i+1] = temp;//交换位置完成
            }
        }
        System.out.println(Arrays.toString(array));
        //第三轮排序：比较次数2
        for (int i = 0; i < array.length - 3; i++) {
            //前面的数比后面大,就交换位置
            if(array[i] > array[i+1]){
                temp = array[i];//空面的位置空出来
                array[i] = array[i+1];//后面的移到前面去
                array[i+1] = temp;//交换位置完成
            }
        }
        System.out.println(Arrays.toString(array));
        //第四轮排序：比较次数1
        for (int i = 0; i < array.length - 4; i++) {
            //前面的数比后面大,就交换位置
            if(array[i] > array[i+1]){
                temp = array[i];//空面的位置空出来
                array[i] = array[i+1];//后面的移到前面去
                array[i+1] = temp;//交换位置完成
            }
        }
        System.out.println(Arrays.toString(array));
    }

    /**
     * 1-2.简化冒泡排序:
     * int j = 0; j < array.length -1; j++
     * int i = 0; i < array.length -1 -j; i++
     */
    public static void bubbleSorting2(){
        int [] array = {24,69,80,57,13};
        int temp = 0;
        //第一轮排序：比较次数4
        for (int j = 0; j < array.length -1; j++) {
            //System.out.println("第"+(j+1)+"轮循环");
            for (int i = 0; i < array.length -1 -j; i++) {
                //前面的数比后面大,就交换位置
                if(array[i] > array[i+1]){
                    temp = array[i];//空面的位置空出来
                    array[i] = array[i+1];//后面的移到前面去
                    array[i+1] = temp;//交换位置完成
                }
            }
            //System.out.println(Arrays.toString(array));
        }
        System.out.println("排序结果为："+Arrays.toString(array));
    }

    /**
     * 2.顺序查找
     */
    public static void searchAsc(){
        String [] strs = {"张三","李四","王五","赵六"};
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输出人名：");
        String name = scanner.next();
        int index = -1;
        for (int i = 0;i < strs.length;i++) {
            if(strs[i].equals(name)){
                System.out.println("找到该用户了:"+name+",下标为："+i);
                index = i;
                break;
            }
        }
        if(index == -1){
            System.out.println("找不到用户："+name);
        }
    }
}
